A-XAPP SDK高级配置

一、XAPP SDK高级配置

在入门篇中介绍了最常见的一些配置和默认的一些配置使用,XAPP SDK 还支持了其它一些复杂的配置方式,大多数情况下默认配置是能满足需要的。

但是某些情况下可能要求更多自定义配置,以下为 XAPP SDK 中提供的一些自定义配置。

1、 调试日志高级设置

对于调试日志,如果不想使用默认的 Log 配置,可以自行调整 Log 配置。

BaseLog.Config logConfig = new BaseLog.Config()
        //log输出日志路径,请注意现在android并不推荐直接使用 /sdcard 的路径
        .setLogoutPath("/sdcard/xlink")
        //输出日志等级
        .setDebugLevel(Loggable.DEBUG)
        //存储文件日志等级(一般请使用DEBUG)
        .setBufferLevel(Loggable.DEBUG)
        //是否允许将日志存储到文件中
        .setEnableLogFile(true)
        //存储日志文件的前缀
        .setLogPreFix("main")
        .setLoggable(new Loggable() {
            @Override
            public int log(int level, String tag, String msg, Throwable e) {
                //可根据使用的log输出方式输出日志,如:
                System.out.println(BaseLog.getPrintLogMsg(tag, msg));
                return level;
            }
        });

默认使用的日志配置XLinkAndroidSDK.defaultConfig(context)也是用同样的方式创建了一个 APP 专用的日志配置信息。

若想基于默认使用的日志配置信息进行少量的更新,只需要直接在默认配置上更新相关配置即可。

BaseLog.Config logConfig = XLinkAndroidSDK.defaultConfig(context)
        .setDebugLevel(Loggable.ERROR)
        .setLogPreFix("rename");

**
注意:自定义实现 LogConfig 时,需要配置setLoggable(),默认不会使用 logcat 输出日志到控制台**

1.1、日志配置变更——自v6.2.6.x版本起

对于调试的日志输出配置,更新了日志的输出配置方式。旧的日志输出配置方式依然有效,但是如果设置了新的配置方式,则将使用新的参数进行处理,旧的配置参数将被忽略。

BaseLog.Config config = new BaseLog.Config()
        //设置是否输出日志到文件中保存
        .setEnableLogFile(true)
        //设置日志输出等级
        .setDebugLevel(Loggable.DEBUG)
        //设置日志输出到文件中的等级
        .setBufferLevel(Loggable.DEBUG)
        //设置自定义的日志输出对象
        .setLoggable(customLogger)
        //设置新的日志信息配置
        .setLogInfoProvider(new LogInfoProvider() {
            @NonNull
            @Override
            public String provideLogFilesStoragePath() {
                //提供日志文件保存文件夹路径,注意只是文件夹,不是文件
                return Environment.getExternalStorageDirectory().getPath().concat("/xlink/");
            }
            @NonNull
            @Override
            public String provideLogFileName(String time) {
                //当一个日志文件生成时,会调用此方法,参数为文件生成的时间信息;
                //生成一个日志文件名并返回,建议使用上时间信息,防止文件名重复;
                //重名文件不会替换旧文件
                return "log_" + time;
            }
            @NonNull
            @Override
            public String provideLogZipFileName(String time) {
                //若日志文件夹中存在大量日志文件时,将会进行压缩;创建压缩文件时将调用此方法,生成压缩文件的名称
                return "archive_" + time;
            }
        });

默认情况下,如果没有特殊要求或者是特殊处理,建议使用XLinkAndroidSDK提供的默认日志配置参数,也可以在该默认参数中进行修改。

//使用默认配置参数,或者是基于默认参数进行局部修改
BaseLog.Config config=XLinkAndroidSDK.defaultLogConfig(this)
        .setEnableLogFile(false);
//初始化SDK
XLinkConfig.Builder builder = new XLinkConfig.Builder()
        .setLogConfig(config)
        ...

在默认日志配置参数中,相对以前的变更主要在于:

  1. 生成的日志文件不再全部置于/sdcard/xlink的文件夹下,将会根据当前应用包名创建文件夹,并且置于相应的包名文件夹下/sdcard/xlink/包名
  2. 允许开发者自行定义日志文件名称及压缩文件名称,以便定时对日志进行清理或移除
  3. 现在可以获取到当前正在运行的 SDK 输出的日志文件路径
//此方法仅在 XLog 已经启用并且存在输出日志的情况下才可用;否则将返回 null 或不正确的路径
if (XLog.isInited() && XLog.getInstance().isStarted()) {
    String logFilePath = XLog.getInstance().getCurrentLogFilePath();
}

注意事项:务必调用XLog.isInited()确认 XLog 是否 已经初始化成功,否则可能获取到错误的路径;日志文件只有在XLog.startLog()之后才会创建,所以也需要确认 XLog 是否已经启动成功。

2、崩溃日志配置

XAPP SDK 默认支持收集崩溃日志并保存到文件中,该功能默认不开启。

崩溃日志默认保存到以下位置:**/sdcard/xlink/crash/包名_时间_crash.txt**

XLinkConfig.Builder builder = new XLinkConfig.Builder()
        ...
        //是否自动转存崩溃日志
        .setAutoDumpCrash(true)
        //设置崩溃日志的存储信息,若需要转存崩溃日志,请务必设置此参数
        .setCrashInfoProviderable(new XLinkCrashInfoProvider(this))
        ...
        .build();

**
注意:设置保存崩溃日志时,请务必设置崩溃日志存储信息setCrashInfoProviderable(),否则无法将抛出异常,XAPP SDK 无法默认收集应用的崩溃信息**

2.1、自定义保存路径

默认崩溃日志的保存路径,优化保存到外部存储介质中,无法保存时将保存到当前包内部文件夹下。

某些情况下可能无法准确保存到有效的文件位置,通过对默认崩溃日志信息进行少量修改即可将崩溃日志文件保存到指定路径下。

XLinkCrashInfoProvider提供了三个构造方法用于不同的路径配置,默认情况下会收集当前移动设备的一些基本信息(包括 Android 版本与机型等)

//默认使用sdcard,存储子路径为/xlink/crash
new XLinkCrashInfoProvider(context);
//默认使用sdcard,存储子路径为/package
new XLinkCrashInfoProvider(context,"/package");
//由绝对存储路径决定存储位置
new XLinkCrashInfoProvider(context.getPackageName(),"/absolutely_path");

2.2、自定义崩溃信息收集类

如果不想使用默认的 CrashInfoProvider,或者需要收集一些特殊的信息,可以自行实现该接口处理 crash 信息

CrashInfoProviderable carshProvider = new CrashInfoProviderable() {
    @Override
    public String provideEnvironment() {
        //提供当前运行环境
        //dumpDeviceRomInfo为默认提供的方法,可收集Android系统相关的基本信息
        return XLinkCrashInfoProvider.dumpDeviceRomInfo();
    }
    @Override
    public String provideCrashFileStoragePath() {
        //crash文件保存路径,请注意现在android并不推荐直接使用 /sdcard 的路径
        return "/sdcard/xlink/crash/";
    }
    @Override
    public String provideCrashFileName(String s) {
        //以文件创建时间为fileName,需要添加任何前缀或者更改文件名请自行处理,默认会添加后缀txt
        return DemoApplication.getAppInstance().getPackageName()
                .concat(s)
                .concat("_crash");
    }

**
注意:如果需要自行收集崩溃信息或者是使用第三方崩溃收集工具(如Buggly),则不推荐开启崩溃日志收集功能,可能会导致崩溃信息无法正常收集**

3、用户快捷登录

详情请查看进阶篇-用户授权管理

4、多点登录

多点登录是针对对于同一账号可能在不同场景中使用时,不希望账号之前发生互踢现象而新增的一个功能。如同时允许在 pad 及手机上登录同一账号。

使用多点登录时,需要指定多点登录的登录源,当不存在登录源信息时,默认为同一基本用户。当存在登录源信息时,在相同账号登录时会依赖登录源进行识别,以判断是否允许同一账号同时处于登录可用状态。

XLinkConfig config = XLinkConfig.newBuilder()
    //设置登录源,单点登录时可以不进行设置,不同登录源允许多点登录
    .setAuthResource(resource)
    ...
    .build();
XLinkAndroidSDK.init(config);

不同登录对账号的登录状态影响如下:

登录状态1 登录状态2 是否允许同时登录
登录状态1 登录状态2 是否允许同时登录
默认登录源+账号 默认登录源+账号 不允许
默认登录源+账号 其它登录源+账号 允许
登录源1+账号 登录源1+账号 不允许(同账号且同一登录源)
登录源1+账号 登录源2+账号 允许(同账号但不同登录源)

注意:登陆源只支持数字和字母(暂不支持空格),最大长度为16个字符,默认为 null

5、Restful 接口 client 配置

REST 接口是使用 retrofit 进行网络请求, 部分 API 请求可能需要进行 SSL 的证书配置,此时需要通过 okHttpClient 配置相应的 SSL 证书。

原有的 REST 接口并不存在相关的 SSL 配置处理,所以新版本提供了 REST 接口对 client 进行自定义配置的接口

builder.setNetworkClientProcessor(new NetworkClientProcessor() {
    @Override
    public void processorClient(OkHttpClient.Builder builder) {
        //根据需要使用可自定义对 client 进行配置
        builder.sslSocketFactory(factory,manager);
    }
});

**
注意:该配置的 client 将会被整个 XAPP SDK 使用过程中使用到**

6、CM 连接 SSL 配置

部分情况下可能需要使用到企业的自签证书,此时默认的 SSL 处理将不能正常提供有效的校验及数据通行处理,新增了可自定义提供 CM 连接时的 SSL socket 对象

builder.setSSLFactoryProvider(new SSLFactoryProviderable() {
    @Override
    public SocketFactory getSSLFactory() {
        //根据需要创建自己的SSL socket提供证书的验证操作
        return null;
    }
});

二、更新说明

日期 更新内容
2019-04-03 自v6.2.6.x版本起,更新日志输出的配置
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题